package br.com.velp.sudecap.entidade;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <descricao> Bean Responsável Pelo Mapeamento da Tabela IMOVEL </descricao>
 * </sumario>
 */
@Entity
@Table(name = "IMOVEL")
public class Imovel extends EntityBase {
    
    public static final Long serialVersionUID = 1l;
    
    @Id
    @SequenceGenerator(name = "SQ_ID_IMO", sequenceName = "SQ_ID_IMO", allocationSize = 1)
    @GeneratedValue(generator = "SQ_ID_IMO")
    @Column(name = "ID_IMOVEL", nullable = false, unique = true)    
    private Long id;
    @Column(name = "CEP", length = 8, nullable = false)
    private Long cep;
    @Column(name = "USU_CADASTRO", nullable = false)
    private Long idUsuarioCadastro;
    @Column(name = "USU_ALTERACAO")
    private Long idUsuarioAlteracao;
    @Column(name = "AREA_TOTAL", nullable = false)
    private Double areaTotal;
    @Column(name = "TIPO", length = 2)
    private String tipo;
    @Column(name = "CT", length = 10, nullable = false)
    private String ct;
    @Column(name = "CP", length = 15)
    private String cp;
    @Column(name = "PL", length = 15)
    private String pl;
    @Column(name = "BAIRRO_OFICIAL", length = 50, nullable = false)
    private String bairroOficial;
    @Column(name = "ZONA", length = 15, nullable = false)
    private String zona;
    @Column(name = "QUADRA", length = 15, nullable = false)
    private String quadra;
    @Column(name = "LOTE", length = 15, nullable = false)
    private String lote;
    @Column(name = "INDICE_CADASTRAL", length = 20, nullable = false)
    private String indiceCadastral;
    @Column(name = "CTM_SETOR", length = 2)
    private String ctmSetor;
    @Column(name = "CTM_QUADRA", length = 5)
    private String ctmQuadra;
    @Column(name = "CTM_IMOVEL", length = 5)
    private String ctmImovel;
    @Column(name = "SELO", length = 15)
    private String selo;
    @Column(name = "OBSERVACAO", length = 500)
    private String observacao;
    @Column(name = "CODIGO", length = 15, nullable = false)
    private String codigo;
    @Column(name = "TIPO_LOGRADOURO", length = 20)
    private String tipoLogradouro;
    @Column(name = "LOGRADOURO", length = 150)
    private String logradouro;
    @Column(name = "BAIRRO", length = 100)
    private String bairro;
    @Column(name = "NUMERO", length = 10)
    private String numero;
    @Column(name = "COMPLEMENTO", length = 50)
    private String complemento;
    @Column(name = "UF", length = 2)
    private String UF;
    @Column(name = "DATA_CADASTRO", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCadastro;
    @Column(name = "DATA_ALTERACAO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataAlteracao;
    @ManyToOne
    @JoinColumn(name = "ID_CARTORIO")
    private Cartorio cartorio;
    @ManyToOne
    @JoinColumn(name = "ID_CIDADE")
    private Cidade cidade;
    @ManyToOne
    @JoinColumn(name = "ID_REGIONAL")
    private Regional regional;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "imovel")
    private List<ImovelEmpreendimento> imoveisEmpreendimentos = new ArrayList<ImovelEmpreendimento>();

    public Imovel() {
    }

    public Imovel(Long id) {
	this.id = id;
    }

    public Long getId() {
	return id;
    }

    public void setId(Long id) {
	this.id = id;
    }

    public Long getIdUsuarioAlteracao() {
	return idUsuarioAlteracao;
    }

    public void setIdUsuarioAlteracao(Long idUsuarioAlteracao) {
	this.idUsuarioAlteracao = idUsuarioAlteracao;
    }

    public Long getIdUsuarioCadastro() {
	return idUsuarioCadastro;
    }

    public void setIdUsuarioCadastro(Long idUsuarioCadastro) {
	this.idUsuarioCadastro = idUsuarioCadastro;
    }

    public Double getAreaTotal() {
	return areaTotal;
    }

    public void setAreaTotal(Double areaTotal) {
	this.areaTotal = areaTotal;
    }

    public String getUF() {
	return UF;
    }

    public void setUF(String UF) {
	this.UF = UF;
    }

    public String getBairro() {
	return bairro;
    }

    public void setBairro(String bairro) {
	this.bairro = bairro;
    }

    public String getBairroOficial() {
	return bairroOficial;
    }

    public void setBairroOficial(String bairroOficial) {
	this.bairroOficial = bairroOficial;
    }

    public Long getCep() {
	return cep;
    }

    public void setCep(Long cep) {
	this.cep = cep;
    }

    public String getCodigo() {
	return codigo;
    }

    public void setCodigo(String codigo) {
	this.codigo = codigo;
    }

    public String getComplemento() {
	return complemento;
    }

    public void setComplemento(String complemento) {
	this.complemento = complemento;
    }

    public String getCp() {
	return cp;
    }

    public void setCp(String cp) {
	this.cp = cp;
    }

    public String getCt() {
	return ct;
    }

    public void setCt(String ct) {
	this.ct = ct;
    }

    public String getCtmImovel() {
	return ctmImovel;
    }

    public void setCtmImovel(String ctmImovel) {
	this.ctmImovel = ctmImovel;
    }

    public String getCtmQuadra() {
	return ctmQuadra;
    }

    public void setCtmQuadra(String ctmQuadra) {
	this.ctmQuadra = ctmQuadra;
    }

    public String getCtmSetor() {
	return ctmSetor;
    }

    public void setCtmSetor(String ctmSetor) {
	this.ctmSetor = ctmSetor;
    }

    public Date getDataAlteracao() {
	return dataAlteracao;
    }

    public void setDataAlteracao(Date dataAlteracao) {
	this.dataAlteracao = dataAlteracao;
    }

    public Date getDataCadastro() {
	return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
	this.dataCadastro = dataCadastro;
    }

    public String getIndiceCadastral() {
	return indiceCadastral;
    }

    public void setIndiceCadastral(String indiceCadastral) {
	this.indiceCadastral = indiceCadastral;
    }

    public String getLogradouro() {
	return logradouro;
    }

    public void setLogradouro(String logradouro) {
	this.logradouro = logradouro;
    }

    public String getLote() {
	return lote;
    }

    public void setLote(String lote) {
	this.lote = lote;
    }

    public String getNumero() {
	return numero;
    }

    public void setNumero(String numero) {
	this.numero = numero;
    }

    public String getObservacao() {
	return observacao;
    }

    public void setObservacao(String observacao) {
	this.observacao = observacao;
    }

    public String getPl() {
	return pl;
    }

    public void setPl(String pl) {
	this.pl = pl;
    }

    public String getQuadra() {
	return quadra;
    }

    public void setQuadra(String quadra) {
	this.quadra = quadra;
    }

    public String getSelo() {
	return selo;
    }

    public void setSelo(String selo) {
	this.selo = selo;
    }

    public String getTipo() {
	return tipo;
    }

    public void setTipo(String tipo) {
	this.tipo = tipo;
    }

    public String getTipoLogradouro() {
	return tipoLogradouro;
    }

    public void setTipoLogradouro(String tipoLogradouro) {
	this.tipoLogradouro = tipoLogradouro;
    }

    public String getZona() {
	return zona;
    }

    public void setZona(String zona) {
	this.zona = zona;
    }

    public Cartorio getCartorio() {
	return cartorio;
    }

    public void setCartorio(Cartorio cartorio) {
	this.cartorio = cartorio;
    }

    public Cidade getCidade() {
	return cidade;
    }

    public void setCidade(Cidade cidade) {
	this.cidade = cidade;
    }

    public Regional getRegional() {
	return regional;
    }

    public void setRegional(Regional regional) {
	this.regional = regional;
    }

    @Override
    public boolean equals(Object obj) {
	return genericEquals(obj);
    }

    public List<ImovelEmpreendimento> getImoveisEmpreendimentos() {
	return imoveisEmpreendimentos;
    }

    public void setImoveisEmpreendimentos(List<ImovelEmpreendimento> imoveisEmpreendimentos) {
	this.imoveisEmpreendimentos = imoveisEmpreendimentos;
    }

    @Override
    public int hashCode() {
	int hash = 7;
	hash = 53 * hash + (this.id != null ? this.id.hashCode() : 0);
	return hash;
    }
    
}
